package demo09_decorator;

import demo09_decorator.Component.EncryptionModule;
import demo09_decorator.Component.SimpleCharEncyption;
import demo09_decorator.decorator.PowCharEncyption;
import demo09_decorator.decorator.ReverseCharEncyption;

/**
 * Sunny软件公司欲开发了一个数据加密模块，可以对字符串进行加密。最简单的加密算法
 * 通过对字母进行移位来实现，同时还提供了稍复杂的逆向输出加密，还提供了更为高级
 * 的求模加密。用户先使用最简单的加密算法对字符串进行加密，如果觉得还不够可以对
 * 加密之后的结果使用其他加密算法进行二次加密，当然也可以进行第三次加密。试使用
 * 装饰模式设计该多重加密系统。
 */
public class Client {
    public static void main(String[] args) {
        String pwd = "123456";

        System.out.println("--- 简单加密 ---");
        EncryptionModule<String> encryptionModule = new SimpleCharEncyption();
        String encypt = encryptionModule.encypt(pwd);
        System.out.println(encypt);


        System.out.println("--- 逆转加密 ---");
        EncryptionModule<String> encryptionModule2 = new ReverseCharEncyption(encryptionModule);
        String encypt2 = encryptionModule2.encypt(pwd);
        System.out.println(encypt2);

        System.out.println("--- 高级加密 ---");
        EncryptionModule<String> encryptionModule3 = new PowCharEncyption(encryptionModule2);
        String encypt3 = encryptionModule3.encypt(pwd);
        System.out.println(encypt3);

    }
}
